/*
 * Copyright 2008 Johnny Jian
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.googlecode.getris.game.color

import com.googlecode.getris.game.Container
import static org.junit.Assert.*
import org.junit.Test

class ColorfulQuadrelUtilsTest {

	@Test void testRegisterColorfulQuadrels() {
		ColorfulQuadrelUtils.registerColorfulQuadrels()
		Container.QUADRELS.eachWithIndex { quadrelClass, i ->
			def quadrel = quadrelClass.newInstance()
			def container = new MockContainer()

			assert quadrelClass.metaClass.hasProperty(quadrel, 'color')
			assertEquals ColorfulQuadrelUtils.COLORS[i], quadrel.color

			quadrel.copyTo container, 3, 4
			quadrel.eachSquare { x, y ->
				assertTrue container.isSquareAt(x + 3, y + 4)
				assertEquals ColorfulQuadrelUtils.COLORS[i], container.colors[y + 4][x + 3]
			}

			quadrel.removeFrom container, 3, 4
			quadrel.eachSquare { x, y ->
				assertFalse container.isSquareAt(x + 3, y + 4)
				assertNull container.colors[y + 4][x + 3]
			}
		}
	}

}

class MockContainer extends Container {

	def colors = [[null] * 10] * 20

	MockContainer() { super(10, 20, 1) }

	def setColorAt(x, y, color) { colors[y][x] = color }

}
